{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Introduction\n",
    "\n",
    "This example demonstrates how to convert a network from [Caffe's Model Zoo](https://github.com/BVLC/caffe/wiki/Model-Zoo) for use with Lasagne. We will be using the Caffe version of CIFAR-10 Model.\n",
    "\n",
    "We will create a set of Lasagne layers corresponding to the Caffe model specification (prototxt), then copy the parameters from the caffemodel file into our model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "# Converting from Caffe to Lasagne\n",
    "### Download the required files\n",
    "\n",
    "First we download `cifar10_nin.caffemodel` and `model.prototxt`. The supplied `train_val.prototxt` was modified to replace the data layers with an input specification, and remove the unneeded loss/accuracy layers."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Import Caffe\n",
    "\n",
    "To load the saved parameters, we'll need to have Caffe's Python bindings installed."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import sys\n",
    "caffe_root = '/home/xilinx/caffe/'  # this file should be run from {caffe_root}/examples (otherwise change this line)\n",
    "sys.path.insert(0, caffe_root + 'python')\n",
    "import caffe"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Load the pretrained Caffe network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "net_caffe = caffe.Net('CIFAR_10.prototxt', 'cifar10_quick_iter_5000.caffemodel.h5', caffe.TEST)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Import Lasagne"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import lasagne\n",
    "from lasagne.layers import InputLayer, DropoutLayer, DenseLayer, NonlinearityLayer\n",
    "#from lasagne.layers.dnn import Conv2DDNNLayer as ConvLayer\n",
    "from lasagne.layers import Conv2DLayer as ConvLayer\n",
    "from lasagne.layers import Pool2DLayer as PoolLayer\n",
    "from lasagne.nonlinearities import softmax, rectify, linear\n",
    "import conv_fpga\n",
    "from conv_fpga import FPGA_CIFAR10\n",
    "from conv_fpga import FPGAQuickTest\n",
    "#from conv_fpga import Conv2DLayer as ConvLayer\n",
    "from conv_fpga import FPGAWeightLoader as FPGALoadW\n",
    "from lasagne.utils import floatX"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create a Lasagne network\n",
    "Layer names match those in `model.prototxt`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "net = {}\n",
    "net['input'] = InputLayer((None, 3, 32, 32))\n",
    "net['conv1'] = ConvLayer(net['input'], num_filters=32, filter_size=5, pad=2, nonlinearity=None)\n",
    "net['pool1'] = PoolLayer(net['conv1'], pool_size=2, stride=2, mode='max', ignore_border=False)\n",
    "net['relu1'] = NonlinearityLayer(net['pool1'], rectify)\n",
    "net['conv2'] = ConvLayer(net['relu1'], num_filters=32, filter_size=5, pad=2, nonlinearity=rectify)\n",
    "net['pool2'] = PoolLayer(net['conv2'], pool_size=2, stride=2, mode='average_exc_pad', ignore_border=False)\n",
    "net['conv3'] = ConvLayer(net['pool2'], num_filters=64, filter_size=5, pad=2, nonlinearity=rectify)\n",
    "net['pool3'] = PoolLayer(net['conv3'], pool_size=2, stride=2, mode='average_exc_pad', ignore_border=False)\n",
    "net['ip1'] = DenseLayer(net['pool3'], num_units=64, nonlinearity = None)\n",
    "net['ip2'] = DenseLayer(net['ip1'], num_units=10, nonlinearity = None)\n",
    "net['prob'] = NonlinearityLayer(net['ip2'], softmax)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "### Copy the parameters from Caffe to Lasagne"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "layers_caffe = dict(zip(list(net_caffe._layer_names), net_caffe.layers))\n",
    "\n",
    "for name, layer in net.items():\n",
    "    try:   \n",
    "        if name=='ip1'or name=='ip2':\n",
    "            layer.W.set_value(np.transpose(layers_caffe[name].blobs[0].data))\n",
    "            layer.b.set_value(layers_caffe[name].blobs[1].data)\n",
    "        else:\n",
    "            layer.W.set_value(layers_caffe[name].blobs[0].data[:,:,::-1,::-1])\n",
    "            layer.b.set_value(layers_caffe[name].blobs[1].data)\n",
    "            \n",
    "    except AttributeError:\n",
    "        continue"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Copy the parameters from CPU to FPGA OnChip Memory"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "weight shape (32, 3, 5, 5)\n",
      "kermax 0.191131100059\n",
      "kermin -0.26925727725\n",
      "Elapsed Test Time:  0.002257811999999859\n",
      "weight shape (32, 32, 5, 5)\n",
      "kermax 0.112733885646\n",
      "kermin -0.121608451009\n",
      "Elapsed Test Time:  0.0007232489999999814\n",
      "weight shape (64, 32, 5, 5)\n",
      "kermax 0.0932634323835\n",
      "kermin -0.0825128629804\n",
      "Elapsed Test Time:  0.0013065350000012188\n",
      "weight shape (64, 64, 4, 4)\n",
      "kermax 0.366065233946\n",
      "kermin -0.347633630037\n",
      "Elapsed Test Time:  0.0016316950000003771\n",
      "weight shape (10, 64, 1, 1)\n",
      "kermax 0.284343063831\n",
      "kermin -0.279969036579\n",
      "Elapsed Test Time:  0.00022236299999889297\n"
     ]
    }
   ],
   "source": [
    "#FPGALoadW(weight, status, IFDim, OFDim, PadDim)\n",
    "weight = net['conv1'].W.get_value()\n",
    "FPGALoadW(weight, 1, 32, 32, 2)\n",
    "weight = net['conv2'].W.get_value()\n",
    "FPGALoadW(weight, 2, 16, 16, 2)\n",
    "weight = net['conv3'].W.get_value()\n",
    "FPGALoadW(weight, 3, 8, 8, 2)\n",
    "weight = net['ip1'].W.get_value()\n",
    "weight = np.transpose(weight)\n",
    "weight = weight.reshape(64, 64, 4, 4)\n",
    "FPGALoadW(weight, 4, 4, 1, 0, flip_filters=False)\n",
    "weight = net['ip2'].W.get_value()\n",
    "weight = np.transpose(weight)\n",
    "weight = weight.reshape(10, 64, 1, 1)\n",
    "FPGALoadW(weight, 5, 1, 1, 0, flip_filters=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "# Trying it out\n",
    "Let's see if that worked. \n",
    "\n",
    "### Import numpy and set up plotting\n",
    "### Import time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import gzip\n",
    "import _pickle as cPickle\n",
    "import matplotlib.pyplot as plt\n",
    "import time\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Download some test data\n",
    "Load CIFAR_10 test data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x2a17ea50>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nGSm7AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2a231390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = np.load('cifar10.npz')\n",
    "mean_image = np.load('mean_image.npy')\n",
    "data_zeromean = data['raw'] - mean_image\n",
    "\n",
    "def make_image(X):\n",
    "    im = np.swapaxes(X.T, 0, 1)\n",
    "    im = im - im.min()\n",
    "    im = im * 1.0 / im.max()\n",
    "    return im\n",
    "plt.figure(figsize=(5, 5))\n",
    "plt.imshow(make_image(data['raw'][0]), interpolation='nearest')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### FPGA Deployment (CIFAR10 Layer)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "FPGA_net = {}\n",
    "FPGA_net['input'] = InputLayer((None, 3, 32, 32))\n",
    "FPGA_net['cifar10'] = FPGA_CIFAR10(FPGA_net['input'])\n",
    "FPGA_net['prob'] = NonlinearityLayer(FPGA_net['cifar10'], softmax)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Elapsed Test Time:  3.339811682000004\n",
      "CPU times: user 10.1 s, sys: 4.3 s, total: 14.4 s\n",
      "Wall time: 11.1 s\n"
     ]
    }
   ],
   "source": [
    "batch_size = 500\n",
    "\n",
    "%time prob = lasagne.layers.get_output(FPGA_net['cifar10'], floatX(data_zeromean[0:batch_size]*64), deterministic=True)#.eval()\n",
    "FPGA_predicted = np.argmax(prob, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.732\n"
     ]
    }
   ],
   "source": [
    "FPGA_accuracy = np.mean(FPGA_predicted == data['labels'][0:batch_size])\n",
    "#print(FPGA_predicted)\n",
    "#print(data['labels'][0:batch_size])\n",
    "print(FPGA_accuracy)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### FPGA Deployment (QuickTest Function)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Elapsed Test Time:  3.3399151200000006\n",
      "CPU times: user 3.64 s, sys: 180 ms, total: 3.82 s\n",
      "Wall time: 3.81 s\n"
     ]
    }
   ],
   "source": [
    "batch_size = 500\n",
    "\n",
    "OFMDim = 1\n",
    "OFMCH = 10\n",
    "%time FPGA_output = FPGAQuickTest(data_zeromean*64, batch_size, OFMDim, OFMCH)\n",
    "FPGA_predicted = np.argmax(FPGA_output.reshape(batch_size, -1), 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1000, 3, 32, 32)\n"
     ]
    }
   ],
   "source": [
    "FPGA_accuracy = np.mean(FPGA_predicted == data['labels'][0:batch_size])\n",
    "#print(FPGA_predicted)\n",
    "#print(FPGA_accuracy)\n",
    "print(data_zeromean.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Graph some images and predictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2a02ae50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def make_image(X):\n",
    "    im = np.swapaxes(X.T, 0, 1)\n",
    "    im = im - im.min()\n",
    "    im = im * 1.0 / im.max()\n",
    "    return im\n",
    "\n",
    "plt.figure(figsize=(16, 5))\n",
    "for i in range(0, 10):\n",
    "    plt.subplot(1, 10, i+1)\n",
    "    plt.imshow(make_image(data['raw'][i]), interpolation='nearest')\n",
    "    true = data['CLASSES'][data['labels'][i]]\n",
    "    pred = data['CLASSES'][FPGA_predicted[i]]\n",
    "    color = 'green' if true == pred else 'red'\n",
    "    plt.text(0, 0, true, color='black', bbox=dict(facecolor='white', alpha=1))\n",
    "    plt.text(0, 32, pred, color=color, bbox=dict(facecolor='white', alpha=1))\n",
    "\n",
    "    plt.axis('off')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ARM CPU Deployment"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Elapsed Test Time:  160.62767469800002\n"
     ]
    }
   ],
   "source": [
    "batch_size = 500\n",
    "\n",
    "start_time = time.process_time()\n",
    "prob = np.array(lasagne.layers.get_output(net['prob'], floatX(data_zeromean[0:batch_size]), deterministic=True).eval())\n",
    "predicted = np.argmax(prob, 1)\n",
    "end_time = time.process_time()\n",
    "print(\"Elapsed Test Time: \", end_time-start_time)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Check our accuracy\n",
    "We expect around 75%"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.746\n"
     ]
    }
   ],
   "source": [
    "accuracy = np.mean(predicted == data['labels'][0:batch_size])\n",
    "# print(predicted)\n",
    "# print(data['labels'][0:500])\n",
    "print(accuracy)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.4.3+"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
